Projection Matix :: OPEN GL ES[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

OPEN GL ES
[1]
등록일:2018-06-22 21:19:41 (0%)
작성자:
제목:Projection Matix

* 요구사항 *

7.1. Projection Matrix

7.2. Parallel Projection

7.3. Perspective Projection




  7.1 Projection Matrix


Projection Matrix가 무엇일까요?


Projection이란 투사, 투영이라는 뜻입니다.


쉽게 말해 원근감을 어떻게 표현할 것인지에 대한 부분을 정하는 부분이라고 생각하시면 되요.


이후 3차원 좌표를 우리의 2D 모니터로 투영시키는 것이 Projection Matrix의 역할입니다.


한번 투영된 이후에는 z 값이 사라지므로 역산을 할 수는 없습니다.


크게 2 가지의 Projection으로 나뉘어 지는데요.

- Parallel Projection

- Perspective Projection


뒤에 있는 물체를 크기변환 시킬 것인지, 안 시킬 것인지가 위 2가지의 차이입니다.


먼저 Parallel Projection 부터 알아보겠습니다.


  7.2 Parallel Projection


Parallel Projection 평행으로 투영하는 방식을 뜻합니다.

(OpenGL 라이브러리에서는 Orthographic 이라고 표현합니다. 직교라는 뜻이에요)


아래 그림과 같이 실제 모델 좌표계에서 2D 화면으로 보낼 때 평행선으로 객체가 보내어지면


Parallel Projection이라고 쉽게 판단할 수 있습니다.



평행 투영에는 장점과 단점이 모두 존재합니다.


먼저, 장점


- 평면도를 그릴 수 있습니다. (건축에서 청사진을 그릴 때 활용)

- 상대적인 크기를 알 수 있다.

- 구현하기 쉽다.


단점


- 사실적이지 않다.

- 뒤에 있나 앞에 있나 물체의 크기가 같다. 잘못된 인지를 만들 수 있다.

- 아래 사진은 Penrose stairs라 불리는 불가능한 객체를 보여줍니다.

구현하는 방법에 대해 알아보겠습니다.


clipping 크기를 정규화시키는 방법을 주로 사용하는데요. 이를 위해 행렬 변환을 사용합니다.


크게 2가지 단계로 나뉘어져요.




1. 원점 이동

이동 변환을 통해 원점으로 이동합니다.

원점으로 이동하는 행렬은 다음과 같습니다.


Translate(-(left+right)/2, -(bottom+top)/2, near/2)


2. x, y는 2로 / z는 1로 스케일 변환


Scale(2/(left-right), 2/(top-bottom), 1/(far-near))


두 변환을 각각 계산후 행렬 곱을 통해 최종 Orthogonal Matrix를 생성할 수 있답니다.


예제로 만든 Ortho 함수는 아래와 같으니 참고해주세요.


mat4 Ortho(float left, float right, float bottom, float top, float near, float far)

{

mat4 T = Translate(-(left+right)/2, -(top+bottom)/2, near/2);

mat4 S = Scale(2/(left-right), 2/(top-bottom), 1/(far-near));

mat4 V = S*T;


return V;

}




  7.3 Perspective Projection


Perspective Projection은 원근법을 적용하여 객체를 표현하는 방식입니다.


위 사진을 보시면 이해가 쉬우실 것 같아요.


평행 투영이 그대로 평행선을 따라 투영되는 반면에, 원근 투영은 실제 비율에 맞추어서


사실과 같은 크기로 객체가 그려지게됩니다.


Perspective Projection 구현을 위해서는 삼각형의 닮음을 이용합니다.



원하는 scale에 Unhinging을 해주면 Perspective Projection이 완성됩니다.


Unhinging이란 View-Volume을 아래 그림처럼 펴주는 것을 말합니다.




Unhinging에 xyz의 Scale이 적용되면 Perspective Projection이 완성됩니다.


행렬식은 아래와 같습니다.



Orthogonal과 같이 mat4 함수를 만들고 이를 계산하여 V를 return해주면 됩니다.


행렬식을 알면 구현하는 것은 크게 어렵지 않습니다.


[본문링크] Projection Matix
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34658
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.